﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Admin_Ajax_DeThiAjax : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request["Methods"] == null)
        {
            Response.Write("{\"Status\":\"Error\"}");
            Response.End();
        }

        switch (Request["Methods"])
        {
            case "DanhSachCauHoi":
                DanhSachCauHoi();
                break;
            case "ThemDeThi":
                ThemDeThi();
                break;
            case "CapNhat":
                CapNhat();
                break;
            case "XoaDeThi":
                XoaDeThi();
                break;
            case "GetInfo":
                GetInfo();
                break;
            case "ThemChiTietDeThi":
                ThemChiTietDeThi();
                break;
            case "XoaChiTietDeThi":
                XoaChiTietDeThi();
                break;
            case "ThemNhanhCH":
                ThemNhanhCH();
                break;
            default:
                break;
        }
    }

    public void GetInfo()
    {
        int Made = int.Parse(Request["MaDe"]);

        DeThiINFO obj = DeThiDAL.GetInfo(Made);
        JavaScriptSerializer serial = new JavaScriptSerializer();
        Response.Write(serial.Serialize(obj));
        Response.End();
    }

    public void DanhSachCauHoi()
    {
        int maloai = int.Parse(Request["MaLoai"]);
        int mamon = int.Parse(Request["MaMon"]);
        int madokho = int.Parse(Request["MaDoKho"]);

        DataTable ds = CauHoiDAL.timkiem(maloai, mamon,madokho);
        StringBuilder tr = new StringBuilder();
        for (int i = 0; i < ds.Rows.Count; i++)
        {
            tr.Append("<tr><td>").Append(ds.Rows[i][0]).Append("</td>");
            tr.Append("<td>").Append(ds.Rows[i][2]).Append("</td>");
            tr.Append("<td><a href='javascript:void()' onclick='return themcauhoi(").Append(ds.Rows[i][0]);
            tr.Append(");' class='btn btn-default'><i class='fa fa-plus'></i></td></tr>");
        }
        Response.Write(tr.ToString());
        Response.End();
    }

    public void ThemDeThi()
    {
        JavaScriptSerializer serial = new JavaScriptSerializer();
        string sdethi = Request.Params["Data"];
        if (sdethi.Equals(""))
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Không thể thêm dữ liệu!\"}");
            Response.End();
        }
        DeThiINFO obj = serial.Deserialize<DeThiINFO>(sdethi);
        if (DeThiDAL.Insert(obj) > 0)
        {
            Response.Write("{\"Status\":\"Success\"}");
        }
        else
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Không thể thêm dữ liệu!\"}");
        }

        Response.End();
    }

    public void CapNhat()
    {
        JavaScriptSerializer serial = new JavaScriptSerializer();
        string sdethi = Request.Params["Data"];
        if (sdethi.Equals(""))
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Dữ liệu không đúng!\"}");
            Response.End();
        }
        DeThiINFO obj = serial.Deserialize<DeThiINFO>(sdethi);
        DeThiINFO curr = DeThiDAL.GetInfo(obj.MaDe);
        obj.SoCauHoi = curr.SoCauHoi;
        if (DeThiDAL.Update(obj) > 0)
        {
            Response.Write("{\"Status\":\"Success\"}");
        }
        else
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Không thể cập nhật dữ liệu!\"}");
        }

        Response.End();
    }

    public void XoaDeThi()
    {
        int MaDeThi = int.Parse(Request.Params["MaDeThi"]);

        if (MaDeThi <= 0)
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Sai thông tin!\"}");
            Response.End();
        }
        
        if (DeThiDAL.Delete(MaDeThi) > 0)
        {
            ChiTietDeThiDAL.Delete(MaDeThi);
            Response.Write("{\"Status\":\"Success\"}");
        }
        else
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Không thể xóa dữ liệu!\"}");
        }

        Response.End();
    }

    public void ThemChiTietDeThi()
    {
        int MaCauHoi = int.Parse(Request.Params["MaCauHoi"]);
        int MaDeThi = int.Parse(Request.Params["MaDeThi"]);

        if (MaCauHoi <= 0 || MaDeThi <= 0)
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Sai thông tin!\"}");
            Response.End();
        }
        ChiTietDeThiINFO current = ChiTietDeThiDAL.GetInfo(MaCauHoi, MaDeThi);
        if (current != null && current.MaCH != 0 && current.MaDe != 0) {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Thông tin đã có!\"}");
            Response.End();
        }

        ChiTietDeThiINFO obj = new ChiTietDeThiINFO();
        obj.MaCH = MaCauHoi;
        obj.MaDe = MaDeThi;
        DeThiINFO mDeThi = DeThiDAL.GetInfo(MaDeThi);
        if (ChiTietDeThiDAL.Insert(obj) > 0)
        {
            mDeThi.SoCauHoi++;
            DeThiDAL.Update(mDeThi);
            Response.Write("{\"Status\":\"Success\"}");
        }
        else
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Không thể thêm dữ liệu!\"}");
        }

        Response.End();
    }
    public void XoaChiTietDeThi()
    {
        int MaCauHoi = int.Parse(Request.Params["MaCauHoi"]);
        int MaDeThi = int.Parse(Request.Params["MaDeThi"]);

        if (MaCauHoi <= 0 || MaDeThi <= 0)
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Sai thông tin!\"}");
            Response.End();
        }
        
        ChiTietDeThiINFO obj = new ChiTietDeThiINFO();
        obj.MaCH = MaCauHoi;
        obj.MaDe = MaDeThi;
        DeThiINFO mDeThi = DeThiDAL.GetInfo(MaDeThi);
        if (ChiTietDeThiDAL.Delete(MaCauHoi, MaDeThi) > 0)
        {
            mDeThi.SoCauHoi--;
            DeThiDAL.Update(mDeThi);
            Response.Write("{\"Status\":\"Success\"}");
        }
        else
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Không thể thêm dữ liệu!\"}");
        }

        Response.End();
    }

    public void ThemNhanhCH()
    {
        int MaDe = int.Parse(Request.Params["DeThi"]);
        int SoCauHoi = int.Parse(Request.Params["SoCauHoi"]);
        int MonThi = int.Parse(Request.Params["MonThi"]);
        int SoCauDe = int.Parse(Request.Params["SoCauDe"]);
        int SoCauTB = int.Parse(Request.Params["SoCauTB"]);
        int SoCauKho = int.Parse(Request.Params["SoCauKho"]);

        int tongsocaude = CauHoiDAL.TongSoCauHoi(MonThi, 3);
        if (tongsocaude < SoCauDe)
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Tổng số câu hỏi có độ khó (dễ) là " + tongsocaude + " ít hơn tổng số nhập vào!\"}");
            Response.End();
        }
        int tongsocautb = CauHoiDAL.TongSoCauHoi(MonThi, 2);
        if (tongsocautb < SoCauTB)
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Tổng số câu hỏi có độ khó (trung bình) là " + tongsocautb + " ít hơn tổng số nhập vào!\"}");
            Response.End();
        }
        int tongsocaukho = CauHoiDAL.TongSoCauHoi(MonThi, 1);
        if (tongsocaukho < SoCauKho)
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Tổng số câu hỏi có độ khó (khó) là " + tongsocaukho + " ít hơn tổng số nhập vào!\"}");
            Response.End();
        }
        Response.End();
        List<CauHoiINFO> dsCauHoi = new List<CauHoiINFO>();
        List<CauHoiINFO> dsCauHoiDe = CauHoiDAL.RandCauHoi(SoCauDe, MonThi,3);
        List<CauHoiINFO> dsCauHoiTB = CauHoiDAL.RandCauHoi(SoCauTB, MonThi, 2);
        List<CauHoiINFO> dsCauHoiKho = CauHoiDAL.RandCauHoi(SoCauKho, MonThi, 1);
        dsCauHoi.AddRange(dsCauHoiDe);
        dsCauHoi.AddRange(dsCauHoiTB);
        dsCauHoi.AddRange(dsCauHoiKho);

        DeThiINFO mDeThi = DeThiDAL.GetInfo(MaDe);
        mDeThi.SoCauHoi = SoCauHoi;
        if (DeThiDAL.ThemCauHoiNhanh(mDeThi, dsCauHoi) > 0)
        {
            Response.Write("{\"Status\":\"Success\"}");
        }
        else
        {
            Response.Write("{\"Status\":\"Error\",\"Mess\":\"Không thể thêm dữ liệu!\"}");
        }

        Response.End();
    }
}